const { MailParser } = require('mailparser');
const Imap = require('imap');
const userConfig = require('./config.js');
const axios = require('axios');
// 接收邮件服务器： imap.qq.com，使用SSL，端口号993
const imap = new Imap({
    user: userConfig.user,
    password: userConfig.password,
    host: 'imap.qq.com',
    port: 993,
    tls: true
});

// 连接到IMAP服务器
imap.connect();

// 当连接成功时
imap.once('ready', () => {
    // 打开收件箱
    imap.openBox('INBOX', true, (err, box) => {
        if (err) throw err;
        console.log('Connected to INBOX');

        // 获取今天启动时间
        const today = new Date();
        today.setHours(0, 0, 0, 0);
        const startDate = today.toISOString();

        // 构建搜索条件，搜索从今天启动时间之后的新邮件
        const searchCriteria = ['UNSEEN', ['SINCE', startDate]];

        // 监听新邮件事件
        imap.on('mail', () => {
            console.log('Received new message(s)');

            // 搜索未读邮件 添加搜索条件
            imap.search(searchCriteria, (err, results) => {
                if (err) throw err;
                console.log(results)
                // 获取最新的邮件
                const f = imap.fetch(results, { bodies: '' });
                f.on('message', (msg, seqno) => {
                    const mailparser = new MailParser();
                    msg.on('body', (stream) => {
                        const info = {};
                        stream.pipe(mailparser);
                        mailparser.on("headers", (headers) => {
                            info.theme = headers.get('subject');
                            info.form = headers.get('from').value[0].address;
                            info.mailName = headers.get('from').value[0].name;
                            info.to = headers.get('to').value[0].address;
                            info.datatime = headers.get('date').toLocaleString();
                        });

                        mailparser.on("data", (data) => {
                            console.log(info)
                            const { form } = info;
                            if(form == userConfig.email) {
                                console.log(data)
                                const { text } = data; // 获取文本信息
                                // 通过文本信息检索到对应的用户发送给pushplus

                                // 对方需要发送指定的内容到邮箱，不通用户需要文本内提到 用户1 用户2 用户3

                                const userMap = {
                                    '用户1':'user1',
                                    '用户2':'user2',
                                    '用户3':'user3',
                                }

                                // const sendUser = userMap[text];
                                // console.log("本次发送sendUser",sendUser)
                                // pushSend(sendUser,"测试内容")
                                

                                if(text == '您的牛奶已经取走') {
                                    pushSend('user1',text)
                                }   

                            }
                        })
                    });
                });

                // 标记邮件为已读
                f.on('end', () => {
                    imap.addFlags(results, 'Seen', (err) => {
                        if (err) console.error(err);
                    });
                });
            });
        });
    });
});

// 连接错误处理
imap.once('error', (err) => {
    console.error(err);
});

// 连接断开处理
imap.once('end', () => {
    console.log('Connection ended');
});


function pushSend(topic, content) {
    const postData = {
      title:"温馨提醒",
      topic,
      content,
      template: "markdown",
    };
    axios
      .post(
        "http://www.pushplus.plus/send?token=",
        postData
      )
      .then((res) => {
        const data = res.data;
        console.log(data);
      });
  }